package edu.hunau.cxb19.basic.class11;

/**
 *
 * @author hb
 *
 *         2020-02-21 14:39:52
 */
public class ResrivseDemo {

	public static void main(String[] args) {
		// call();
		/*
		 * System.out.println(div(3)); System.out.println(div(5));
		 */
		long start = System.currentTimeMillis();// 获得当前系统的毫秒值
		System.out.println(fei(50));
		long end = System.currentTimeMillis();// 获得当前系统的毫秒值
		System.out.println("递归算法耗时:" + (end - start));

		start = System.currentTimeMillis();// 获得当前系统的毫秒值
		System.out.println(feiFor(50));
		end = System.currentTimeMillis();// 获得当前系统的毫秒值
		System.out.println("For循环耗时:" + (end - start));

	}

	/**
	 * 费氏数列： f1=1,f2=1,f(n)=f(n-1)+f(n-2)；(n>=2)
	 * 
	 * @return
	 */
	public static long fei(long n) {
		if (n == 1 || n == 2) {
			return 1;
		}

		return fei(n - 1) + fei(n - 2);

	}

	/**
	 * 使用for循环实现费氏数列
	 * 
	 * @param n
	 * @return
	 */
	public static long feiFor(long n) {
		if (n == 1 || n == 2) {
			return 1;
		}
		long f1 = 1;// 表示f(n-2)
		long f2 = 1;// 表示f(n-1)
		for (int i = 3; i <= n; i++) {
			f2 = f1 + f2;
			f1 = f2 - f1;
		}
		return f2;

	}

	public static void call() {
		System.out.println("call方法执行....");
		call();
	}

	/**
	 * f(n)=n*f(n-1) (n>1,f(1)=1)
	 * 
	 * @param n
	 * @return
	 */
	public static long div(long n) {
		// 提供退出条件
		if (n == 1) {
			return 1;
		}

		return n * div(n - 1);

	}
}
